import plugin from '../../lib/plugins/plugin.js';
import _ from "lodash";

// 存储指令记录，格式：{指令xx: {首次时间, 触发次数}}
const commandRecord = new Map();
// 去重时间窗口（毫秒），可调整
const deduplicationWindow = 2000; // 2秒内视为重复
//主要是防止同一个机器运行2个及以上的号且又在同一个群里机器人同时响应并回复指令导致刷屏

export class commandIntercept extends plugin {
    constructor() {
        super({
            name: "多机器人号拦截去重",
            dsc: "拦截重复指令，仅响应首次触发的指令",
            event: "message", // 监听所有消息
            priority: -97755555552100, // 高优先级确保先执行拦截
            rule: [
                {
                    reg: /^[#【&]|.*攻略|.*面板|.*伤害|.*圣遗物|.*签到|.*体力|.*http|.*决斗|.*同归|.*以此类推下去/, // 匹配以#或者【或者&开头的指令（可按实际格式修改或者添加）
                    fnc: "interceptCommand"
                }
            ]
        });
    }

    async interceptCommand(e) {
        const command = e.msg.trim();
        if (!command) return true; // 空消息直接放行

        const now = new Date().getTime();
        let record = commandRecord.get(command);
        const isFirstCommand = !record;

        // 首次指令：记录时间和次数，正常响应
        if (isFirstCommand) {
            commandRecord.set(command, {
                firstTime: now,
                triggerCount: 1
            });
            logger.info(`首次指令: ${command}`);
            return false; // 不拦截，继续执行后续逻辑
        }

        // 计算时间间隔
        const timeDiff = now - record.firstTime;
        record.triggerCount++;

        // 2秒内触发次数≥2次时，拦截后续指令
        if (timeDiff <= deduplicationWindow && record.triggerCount >= 2) {
            logger.info(`拦截重复指令: ${command} (第${record.triggerCount}次触发)`);
            return true; // 拦截
        }

        // 超出时间窗口：重置记录
        if (timeDiff > deduplicationWindow) {
            record.firstTime = now;
            record.triggerCount = 1;
        }

        return false; // 非重复指令，继续执行
    }
}
